package com.power.sifa.approve.model.doc;

import cn.hutool.extra.spring.SpringUtil;
import com.plf.core.base.model.EnumerationHelper;
import com.power.sifa.approve.dao.Apl_applicantDao;
import com.power.sifa.approve.dao.Apl_thirdperDao;
import com.power.sifa.approve.model.Apl_applicant;
import com.power.sifa.approve.model.Apl_thirdper;
import com.power.sifa.approve.model.enumeration.Tp_applicant;
import com.power.sifa.approve.model.enumeration.Tp_procmaterial;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 驳回行政复议决定书
 */
@Data
public class HearAuditRejectDoc extends AbstractDoc{

    /**
     * 所有人员信息
     */
    private String applystr;
    /**
     * 正文
     */
    private String content;
    /**
     * 申请人请求
     */
    private String aplrequest;
    /**
     * 申请人称
     */
    private String illustrate;
    /**
     * 被申请人答复称
     */
    private String reply;
    /**
     * 第三人称
     */
    private String thirequest;
    /**
     * 经审理查明
     */
    private String finding;
    /**
     * 本府认为
     */
    private String think = "    xxx属于《中华人民共和国行政复议法实施条例》第四十八条第一款第xxx项规定的情形。根据该条规定，本府决定：驳回申请人的行政复议申请";
    /**
     * 声明
     */
    private String statement = "    符合行政诉讼受案范围的，写明：申请人（第三人）对本决定不服，可以自接到本决定之日起15日内，向xxx人民法院提起行政诉讼。（不符合行政诉讼受案范围的，无需列明）";


    private final static String TEMPLATE = "    申请人对被申请人{behavior}不服，于{subtime}向本府申请行政复议，本府依法已予受理。现已审理终结。";


    public HearAuditRejectDoc() {
        super();
        this.setDocType(Tp_procmaterial.HEAR_REJECT);
    }

    public HearAuditRejectDoc(String applyid) {
        super(applyid);
        this.setDocType(Tp_procmaterial.HEAR_REJECT);
    }


    @Override
    public AbstractDoc generateTemplate(String applyid) {
        HearAuditRejectDoc template = new HearAuditRejectDoc(applyid);
        // 案号
        template.setApl_admre_audit_code(this.getApl_admre_audit_code());
        template.setApplystr(this.transApplystr(applyid));
        String content = TEMPLATE.replace("{behavior}", this.transBehavior());
        content = content.replace("{subtime}", this.transSubtime());
        template.setContent(content);
        return template;
    }


    private String transApplystr(String applyid) {
        EnumerationHelper helper =  SpringUtil.getBean(EnumerationHelper.class);
        Apl_applicantDao apl_applicantDao =  SpringUtil.getBean(Apl_applicantDao.class);
        Apl_thirdperDao apl_thirdperDao =  SpringUtil.getBean(Apl_thirdperDao.class);
        List<Apl_applicant> applicantList = apl_applicantDao.getByApplyid(applyid);

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat formatT = new SimpleDateFormat("yyyy年M月d日");
        StringBuilder applystr = new StringBuilder();
        // 申请人
        {
            List<Apl_applicant> applist = applicantList.stream().filter(p -> Tp_applicant.CITIZEN == p.getType()).collect(Collectors.toList());
            for (Apl_applicant v : applist) {
                applystr.append("    ");
                applystr.append("申请人：");
                applystr.append(v.getName());
                if(null != v.getGender()) {
                    applystr.append("，" + helper.getDescription(v.getGender()));
                }
                if(null != v.getNation()) {
                    applystr.append("，" + helper.getDescription(v.getNation()));
                }
                if (StringUtils.isNotEmpty(v.getBirthym())) {
                    try {
                        applystr.append("，" + formatT.format(format.parse(v.getBirthym())));
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                }
                if(null != v.getAddr()) {
                    applystr.append("，" + v.getAddr());
                }
                applystr.append("\n");
            }
        }
        // 法人或者其他组织
        {
            List<Apl_applicant> aplentlist = applicantList.stream().filter(p -> Tp_applicant.UNIT == p.getType()).collect(Collectors.toList());
            if (!CollectionUtils.isEmpty(aplentlist)) {
                for (Apl_applicant v : aplentlist) {
                    applystr.append("    ");
                    applystr.append("申请人（法人或者其他组织）：");
                    applystr.append(v.getName());
                    if(null != v.getAddr()) {
                        applystr.append("，" + v.getAddr());
                    }
                    if(null != v.getManager()) {
                        applystr.append("，" + v.getManager());
                    }
                    if(null != v.getJob()) {
                        applystr.append("，" + v.getJob());
                    }
                    applystr.append("\n" );
                }
            }
        }
        // 被申请人
        applystr.append("    ");
        applystr.append("被申请人：");
        applystr.append(super.getAdmreObj().getTargetname());
        applystr.append("\n");
        // 第三人
        {
            List<Apl_thirdper> thilist = apl_thirdperDao.getByApplyid(applyid);
            if(!CollectionUtils.isEmpty(thilist)) {
                for (Apl_thirdper v : thilist) {
                    applystr.append("    ");
                    applystr.append("第三人：");
                    applystr.append(v.getName());
                    if(null != v.getAddr()) {
                        applystr.append("，" + v.getAddr());
                    }
                    applystr.append("\n");
                }
            }
        }
        return applystr.toString();
    }
}

